package com.asura.ops.sync.sdk.handle;

import com.asura.ops.sync.sdk.model.MqPayload;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * @author: zouyang
 * @date: 2022/9/12 0:30
 * @description:
 */
public interface SyncHandler<T> {

    /**
     * 配置 表，实体映射， <mdm_sku, MdmSkuEntity>
     *
     * @param map
     */
    void configTableEntityClassMap(Map<String, Class> map);

    /**
     * 写入目标数据库链接
     *
     * @param dataSourceList
     */
    void configDatasourceList(List<DataSource> dataSourceList);

    /**
     * 数据同步处理
     *
     * @param payload
     */
    void handle(MqPayload payload) throws Exception;

    /**
     * 插入数据
     *
     * @param t
     */
    default void insert(String tableName, Class<T> clazz, T t) throws SQLException {

    }

    ;

    /**
     * 更新数据
     *
     * @param t
     * @throws SQLException
     */
    default void update(String tableName, Class<T> clazz, T t) throws SQLException {

    }

    /**
     * 删除数据
     *
     * @param tableName
     * @param clazz
     * @param t
     * @throws SQLException
     */
    default void removeById(String tableName, Class<T> clazz, T t) throws SQLException {

    }

    /**
     * 新增或更新
     *
     * @param t
     * @throws IllegalAccessException
     */
    default void insertOrUpdate(String tableName, Class<T> clazz, T t) throws SQLException {

    }

    /**
     * 新增或更新 V2
     *
     * @param t
     * @throws IllegalAccessException
     */
    default void insertOrUpdateV2(String tableName, Class clazz, Object t) throws SQLException {

    }
}

